/**
 * @Description: 正则匹配两字符串之间的值
 * @Version: 1.0
 * @Author: 琴时
 * @Date: 2021-11-29 15:42:12
 * @LastEditors: 琴时
 * @LastEditTime: 2021-12-10 11:14:51
 */

let str =
  '打酱油AX我们是大写埃克斯(x)到大写歪(y)之间的值Y打酱油B,匹配X到Y之间的字符串'
/* 匹配变量 */
const startStr = 'X'
const endStr = 'Y'
/* 匹配两个字符串X与Y中间的字符串包含X与Y*/
const reg = /X.*?Y/g //"."表示任意字符，"?"表示匹配0个或多个
const pattern = new RegExp(`${startStr}.*?${endStr}`, 'g') //与reg等价
console.log('测试:', str.match(reg)) //测试: [ 'X我们是大写埃克斯(x)到大写歪(y)之间的值Y', 'X到Y' ]
console.log('测试:', str.match(pattern)) //测试: [ 'X我们是大写埃克斯(x)到大写歪(y)之间的值Y', 'X到Y' ]

/* 匹配两个字符串X与Y中间的字符串包含A但是不包含Y */
const reg1 = /X.*?(?=Y)/g
const pattern1 = new RegExp(`${startStr}.*?(?=${endStr})`, 'g') //与reg1等价
console.log('测试:', str.match(reg1)) //测试: [ 'X我们是大写埃克斯(x)到大写歪(y)之间的值', 'X到' ]
console.log('测试:', str.match(pattern1)) //测试: [ 'X我们是大写埃克斯(x)到大写歪(y)之间的值', 'X到' ]

/* 匹配两个字符串X与Y中间的字符串且不包含X与Y */
const reg2 = /(?<=X).*?(?=Y)/g
const pattern2 = new RegExp(`(?<=${startStr}).*?(?=${endStr})`, 'g') //与reg2等价
console.log('测试:', str.match(reg2)) //测试: [ '我们是大写埃克斯(x)到大写歪(y)之间的值', '到' ]
console.log('测试:', str.match(pattern2)) //测试: [ '我们是大写埃克斯(x)到大写歪(y)之间的值', '到' ]
